<?php

/**
 * @desc Отдает файл.
 *
 */
class Learning_Backend_Aids_Download extends Kernel_Filter 
{
    
    /**
     * Тип содержимого файла по умолчанию.
     *
     */
    const DEFAULT_MIMETYPE = 'application/octet-stream';
    
    /**
     * Метод обработки пользовательского запроса.
     *
     */
    public function process() 
    {
        parent::process();
        
        $file_name = $this->_getFileName();
        
        // проверяем наличие файла
        if (!is_file(SITE_ROOT . '/' . Kernel_Config::get('learning', 'UPLOAD_DIR') . $file_name)) {
            $this->_abort('File not found');
        }

        // выдаем файл в браузер
        $this->_output($file_name);
    }
    
    /**
    * @desc Определяем имя файла.
    * 
    * @return string [$filename]
    */
    private function _getFileName() 
    {
        $query = '
            SELECT 
                   `file` 
              FROM 
                   `learning_aids_files` 
             WHERE 
                   `id` = ' . (int)Application::getRequest()->get('file');
        return database::fetchOne($query);
    }
    
    /**
     * Отдает файл в браузер.
     *
     * @param   string  $filename
     */
    private function _output($file_name) 
    {
        Application::getResponse()->header(array(
                   'Content-Type' => self::DEFAULT_MIMETYPE,
            'Content-Disposition' => 'attachment; filename="' . $file_name . '"',
                 'Content-Length' => filesize(SITE_ROOT . '/' . Kernel_Config::get('learning', 'UPLOAD_DIR') . $file_name),
        ))->readfile(SITE_ROOT . '/' . Kernel_Config::get('learning', 'UPLOAD_DIR') . $file_name);
    }
    
}